/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.googlecode.agendajedi.dao;

import com.googlecode.agendajedi.dominio.Contato;
import com.googlecode.agendajedi.dominio.Usuario;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author Lee Majors Jedi
 */

@Repository
@Transactional

public class ContatoDao  {
    
    @PersistenceContext
    private EntityManager em;
    
    public ContatoDao(){
        
    }
    
    public Contato gravar(Contato contato) throws DataAccessException{
        return em.merge(contato);
    }
    
    public void excluir(Contato contato) throws DataAccessException{
        em.remove(carregar(contato.getIdContato()));
    }
    
    public Contato carregar(Integer id) throws DataAccessException{
        return em.find(Contato.class, id);
    }
    public List<Contato> obterTodos(Integer idUsuario)throws DataAccessException{
        Query consulta = em.createQuery("select c from contato c where c.idUsuario.idUsuario = :idUsuario");
        consulta.setParameter("idUsuario ", idUsuario);
        return (List<Contato>) consulta.getResultList();
    }
    public List<Contato> obterPorNome(String nome,Integer idUsuario)throws DataAccessException{
        
        Query consulta = em.createQuery("select c from usuario c where c.Idusuario.idUsuario = :idUsuaio and " +
                "c.nome like :nome");
        consulta.setParameter("idUsuario", idUsuario);
        consulta.setParameter("nome", "%" + nome + "%");
        return  (List<Contato>)consulta.getResultList();
        
    }
    public List<Contato> obterPorAniversario(Integer idUsuario,Date dataAniversario) throws DataAccessException{
        
        Query consulta = em.createQuery("select c from usuario c where" +
                " c.dataAniversario.dataAniversario = :dataAniversario and like :login");
        consulta.setParameter("dataAniversario","%" + dataAniversario + "%");
        consulta.setParameter("idUsuario", idUsuario);
        return (List<Contato>)consulta.getResultList();
    }
    
}
